home *** CD-ROM | disk | FTP | other *** search
/ Black Crawling Systems Archive Release 1.0 / Black Crawling Systems Archive Release 1.0 (L0pht Heavy Industries, Inc.)(1997).ISO / blackcrwl / elctrnic / i8259.txt < prev    next >
Text File  |  1996-08-24  |  9KB  |  208 lines

  1. I received this from Richard Clayton (richard@locomotive.com). It is
  2. written by one of his colleagues, Chris Hall (chris@locomotive.com).
  3.  
  4. This file won't save you from having to look at the data sheet as
  5. well... it's just an explanation of what those guys at Intel are trying
  6. to say in the specs, and how the 8259 is used in a PC. :)
  7.  
  8. Chris
  9.  
  10. -----------------------------------------------------------------------
  11.  
  12.  
  13.              8259A Interrupt Controller on the PC
  14.              ====================================
  15.  
  16.                                         GMCH  1 Dec 93 10:49
  17.  
  18. 1.  Introduction & Scope
  19.  
  20. The 8259A is a wonderful device.  It has a number of modes of
  21. operation, and some magic priority rotation features.  On the
  22. PC, however, only the very simplest mode is used.
  23.  
  24. This discussion is limited to the way in which the 8259A is
  25. used on the PC.
  26.  
  27. The function of the 8259A is to take up to eight interrupt
  28. sources, and feed any active interrupts, one at a time, to the
  29. CPU.  The processor can individually mask off interrupt
  30. sources.  The 8259A has a priority mechanism, so that lower
  31. priority interrupt sources do not interrupt the CPU while it is
  32. servicing a higher priority interrupt -- but a higher priority
  33. interrupt will be passed on to the processor.
  34.  
  35. 2.  The Jargon
  36.  
  37. An interrupt source, fed into an 8259A, is known as an IRQ --
  38. Interrupt Request.  An 8259A has 8 IRQ inputs.
  39.  
  40. The 8 IRQ inputs are fed into an 8 bit Interrupt Request
  41. Register (IRR), via some "rising edge" detection logic (8 bit
  42. Edge Sense Register -- ESR).
  43.  
  44. The 8259A can be told to mask off any of the IRQ.  The 8259A
  45. has an 8 bit Interrupt Mask Register (IMR).  A one bit in the
  46. IMR masks off the corresponding IRQ.
  47.  
  48. To perform its priority arbitration the 8259A has an 8 bit In
  49. Service Register (ISR).  In the register a bit is set to 1 when
  50. the corresponding interrupt has been passed to the CPU, and the
  51. CPU has not yet signalled End of Interrupt (EOI)
  52.  
  53. The CPU interrupt input is known as INTR.  The 8259A interrupt
  54. output is known as INT, which is connected to the CPU (wait for
  55. it) INTR, or to another 8259A's IRQ.
  56.  
  57. The 8 IRR bits are ANDed with the NOT of the IMR, giving the
  58. interrupt request input to the priority arbitration logic.
  59. Reading between the lines, there is an INT latch, which is set
  60. by the OR of the bits of (IRR AND NOT IMR) higher than the
  61. highest priority bit in the ISR.
  62.  
  63. On an original PC there are 8 possible interrupt sources IRQ0
  64. to IRQ7, fed into one 8259A (I/O address #020..#03F).
  65.  
  66. On AT's and beyond, there are 16 possible interrupt sources
  67. IRQ0 to IRQ15, fed into two 8259A's.  One 8259A (known as #1,
  68. I/O address #020..#03F) is the "Master" and the other is a
  69. "Slave" (known as #2, I/O address #0A0..#0BF).  Only the
  70. Master's INT is connected to the CPU's INTR.  The Slave's INT
  71. is connected to the Master's IRQ2.
  72.  
  73. 3.  The Mechanisms
  74.  
  75. The PC sets the 8259A into:
  76.  
  77.   * Edge Triggered Interrupts
  78.   * Cascaded (on AT and later) ; Single (on earlier machines)
  79.   * Not Special Fully Nested (to do with Slave 8259A, see below)
  80.   * Not Buffered Normal EOI (Not Automatic EOI on INTA)
  81.  
  82. With this in mind, we will start with the simple cases, and
  83. work up.
  84.  
  85. 3.1  One 8259A, All IRQ Unmasked, No Interrupts In Service
  86.      and None Active.
  87.  
  88. So we start from the simplest possible quiescent state.  The
  89. sequence of actions is as follows:
  90.  
  91.    0  The ESR, ISR, IRR and IMR are all zero.
  92.    1  IRQ3 becomes active (goes to 1)
  93.    2  B3 of the ESR is set to 1
  94.    3  B3 of the IRR is set to 1
  95.    4  B3 of the IMR is 0, so the IRR B3 is passed to the
  96.       priority arbitration logic.
  97.    5  All bits of the ISR are 0 (no interrupts are in
  98.       service), so the priority arbitration logic sets the
  99.       INT latch -- so the INT output is set active.
  100.    6  Eventually the CPU issues the first of two INTA
  101.       cycles.  The contents of the IRR are frozen.  The
  102.       8279A selects the highest priority IRR (B3) and sets
  103.       the corresponding ISR (B3).
  104.    7  Setting B3 of the ISR clears B3 of the ESR.
  105.    8  The CPU issues the second of two INTA cycles.  The
  106.       8279A issues the interrupt vector associated with the
  107.       highest priority ISR (B3).  The contents of the IRR
  108.       are unfrozen.
  109.    9  The INT latch is cleared -- so the INT output is set
  110.       inactive.
  111.   10  B3 of the IRR is set to 0 (IRR is unfrozen and B3 of
  112.       ESR is zero).
  113.   11  At some time in the future, the CPU issues an EOI
  114.       command, which clears B3 of the ISR.
  115.  
  116. IRQ3 can remain active beyond step 10, without generating any
  117. further interrupts -- because B3 of IRR has been cleared.  To
  118. produce another interrupt requires IRQ3 to go inactive (0), and
  119. then active (1) again.
  120.  
  121. 3.2  Meaning of "Edge Triggered Interrupt Mode"
  122.  
  123. The behaviour of the ESR, IRR and ISR described above is what
  124. happens in the famous Edge Triggered Interrupt Mode.
  125.  
  126. The purpose is to allow for IRQ signals to be short down/up
  127. pulses.  When the 8259A is reset the ESR is set to zero.  An
  128. upward transition of the IRQ sets the corresponding ESR bit to
  129. 1, which allows the IRQ state to be copied to the IRR --
  130. provoking the interrupt.  When the interrupt is acknowledged
  131. the ISR bit is set, which resets the ESR bit, which forces the
  132. IRR bit to zero -- irrespective of the IRQ.  So even if IRQ is
  133. still 1 when the ISR bit is cleared, at End of Interrupt, no
  134. further interrupts will be generated.
  135.  
  136. 3.3  What Happens if IRQ Changes with the Interrupt is In Service
  137.  
  138. It is clear what happens if IRQ does not do any further down/up
  139. transitions until after EOI.  It is OK for IRQ to go down
  140. before EOI, but going up again is not explicitly described in
  141. the manuals.
  142.  
  143. If a down/up IRQ transition cannot be prevented before EOI,
  144. then it can be (reasonably safely) assumed that this will
  145. generate a further interrupt after EOI -- provided the IRQ is
  146. still up (active, 1) at EOI.  Multiple down/up transitions can
  147. be assumed to have the same effect.
  148.  
  149. What happens if there are one or more down/up IRQ transitions
  150. followed by a final down transition before EOI, is also
  151. undocumented.  I guess that this has no effect.  The
  152. corresponding IRR bit will follow the IRQ, but this may be
  153. expected to have no effect on the (supposed) INT latch, because
  154. the ISR bit prevents it.
  155.  
  156. Obviously, it would be safer to ensure that IRQ does not go
  157. down and then up again before EOI (just down is OK).  If this
  158. is not possible, then I believe the given assumptions to be
  159. reasonable -- perhaps MEJ's boys could help us !
  160.  
  161. 3.4  Master and Slave Handling
  162.  
  163. The PC does not use "Special Fully Nested Mode".  What this
  164. means is that once one of the Slave's interrupts is In Service
  165. it takes precedence over all other Slave interrupts.
  166.  
  167. Slave interrupts are generally indistinguishable from Master
  168. interrupts.  The only tricky bit is that an EOI must be sent to
  169. both Master and Slave.  EOI should be sent to the Slave first
  170. -- to allow any lower priority interrupts on the slave to
  171. assert themselves.  The EOI to the Master then allows any lower
  172. or equal priority interrupts to assert themselves.
  173.  
  174. 3.5  Fiddling with Interrupt Masking
  175.  
  176. Clearing masking or unmasking an interrupt when all is quiet
  177. (no IRQ, IRR or ISR) is trivially OK, and produces no side
  178. effects.
  179.  
  180. If an interrupt was masked and is unmasked, then any "pending"
  181. IRQ will immediately take effect.
  182.  
  183. According to the 8259A diagram published by Intel, the IMR mask
  184. gates the IRR bits into the interrupt priority resolution
  185. logic.  Masking and unmasking an interrupt while its IRR is
  186. active is equivalent, as far as the interrupt priority
  187. resolution logic is concerned, to the IRQ coming and going.
  188. The effect can be seen to be the same as in 3.3 above.
  189.  
  190. There is doubt and uncertainty about what happens if IRQ
  191. bounces up and down while ISR is set.  To avoid difficulties it
  192. would be reasonable (unless the Intel diagram I am working from
  193. is entirely wrong) to mask off the interrupt until EOI, and
  194. then unmask it again -- assuming that there is some other way
  195. of detecting and dealing with the reasons for IRQ changing.
  196.  
  197. ----------end of document-----------
  198.  
  199. [Richard:]
  200.  
  201. Note the worry about IRQ boucing up and down... this all comes
  202. back to the amusing behaviour of the serial chip whilst it is
  203. being serviced.
  204.  
  205. Also, I have seen discussion (in the Crynwr packet driver source; on
  206. a Simtel20 mirror near you) of broken Chips & Technology (?) 8259s which
  207. do not handle non-specific EOIs properly.
  208.